#define _XOPEN_SOURCE 500
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Binary_reader.h"
#include "Alumno.h"

void Alumno_escribir_string(FILE *stream, const char*str);

void Alumno_escribir(FILE *stream, Alumno *p)
{
    fwrite(&(p->id),sizeof(int),1,stream);
    Alumno_escribir_string (stream,p->nia);
    Alumno_escribir_string (stream,p->provincia);
    Alumno_escribir_string (stream,p->nombre);
    Alumno_escribir_string (stream,p->apellidos);
    fwrite(&(p->nota),sizeof(float),1,stream);
}


void Alumno_escribir_string(FILE *stream, const char*str)
{
    int n = strlen(str)+1;
    fwrite(str,n,1,stream);
}


void Alumno_mostrar(Alumno *p)
{
    printf("%d %s %s %s %s %f\n",p->id, p->nia, p->provincia,p->nombre,p->apellidos,p->nota);
}

Alumno *Alumno_leer(FILE *stream)
{
    Alumno *p = malloc(sizeof(Alumno));

    if (!feof(stream)) p->id = BR_integer(stream);
    if (!feof(stream)) p->nia = strdup(BR_string(stream));
    if (!feof(stream)) p->provincia = strdup(BR_string(stream));
    if (!feof(stream)) p->nombre = strdup(BR_string(stream));
    if (!feof(stream)) p->apellidos = strdup(BR_string(stream));
    if (!feof(stream)) p->nota = BR_float(stream);
    if (!feof(stream))     return(p);

    Alumno_destruir(p);
    return (NULL);
}

void Alumno_destruir(void *p_void)
{
    Alumno *p  = (Alumno *) p_void;
    free(p->nia);
    free(p->provincia);
    free(p->nombre);
    free(p->apellidos);
    free(p);
}


